Comparison of parser generators

This is a list of notable lexer generators and parser generators for various language classes.

Contents

Regular languages

Name Website Lexer algorithm Output languages Grammar, code Development platform License
DFASTAR [1] DFA matrix tables C, C++ separate Windows Proprietary
Dolphin [2] DFA C++ separate all Proprietary
flex [3] DFA table driven C mixed all BSD
Alex [4] DFA Haskell mixed all BSD
JFlex [5] DFA Java mixed Java Virtual Machine GNU GPL
C# Flex [6] DFA C# mixed .NET CLR GNU GPL
JLex [7] DFA Java mixed Java Virtual Machine BSD-like [8]
C# Lex [9] DFA C# mixed .NET CLR  ?
CookCC [10] DFA Java mixed Java Virtual Machine BSD
gelex [11] DFA Eiffel mixed Eiffel MIT
gplex [12] DFA C# mixed .NET CLR BSD-like
lex  ? DFA C mixed POSIX Proprietary, CDDL
Quex [13] DFA direct code C, C++ mixed all GNU LGPL
Ragel [14] DFA C, C++, D, Java, Objective-C, Ruby mixed all GNU GPL
re2c [15] DFA direct code C mixed all MIT
Russ Cox's regular expression implementations [16] DFA, NFA Bytecode, x86 assembly language, interpreted separate all MIT
lexertl [17] DFA C++ all GNU LGPL

Deterministic context-free languages

Name Website Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Development platform IDE License
ANTLR [18] LL(*) EBNF ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby mixed generated Java Virtual Machine Yes BSD
APG [19] Recursive descent, Backtracking ABNF C, C++, JavaScript, Java separate none all No GNU GPL
AXE [20] Recursive descent AXE/C++ C++11 mixed none any platform with standard C++11 compiler No Boost
Beaver [21] LALR(1)  ? Java mixed external Java Virtual Machine No BSD
Bison++ [22] LALR(1)  ? C++ mixed external POSIX No GNU GPL
Bisonc++ [23] LALR(1)  ? C++ mixed external POSIX No GNU GPL
BtYacc [24] Backtracking Bottom-up  ? C++ mixed external all No Public domain
byacc [25] LALR(1) YACC C mixed external all No Public domain
BYACC/J [26] LALR(1)  ? C, Java mixed external all No Public domain
CL-Yacc [27] LALR(1)  ? Common Lisp mixed external all No MIT
Coco/R [28] LL(k)  ? C, C++, C#, F#, Java, Ada, Pascal, Modula-2, Oberon, Ruby, Unicon, Visual Basic .NET mixed generated Java Virtual Machine, .NET Framework No GNU GPL
CookCC [29] LALR(1)  ? Java mixed generated Java Virtual Machine No BSD
CppCC [30] LL(k)  ? C++ mixed generated POSIX No GNU GPL
CSP [31] LR(1)  ? C++ separate generated POSIX No Apache License 2.0
CSTools [32] LALR(1)  ? C# mixed generated .NET Framework No Proprietary
CUP [33] LALR(1)  ? Java mixed external Java Virtual Machine No GNU GPL
Dragon [34] LR(1), LALR(1)  ? C++, Java separate generated all No GNU GPL
eli [35] LALR(1)  ? C mixed generated POSIX No GNU GPL, GNU LGPL
Essence [36] LR(???)  ? Scheme 48 mixed external all No BSD
eyapp [37] LALR(1)  ? Perl mixed external or generated all No Perl
Frown [38] LALR(k)  ? Haskell 98 mixed external all No GNU GPL
geyacc [39] LALR(1)  ? Eiffel mixed external all No MIT
GOLD [40] LALR(1) BNF x86 assembly language, ANSI C, C#, D, Java, Pascal, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++ separate generated Microsoft Windows Yes Modified Zlib
GPPG [41] LALR(1) YACC C# separate external Microsoft Windows Yes BSD
Grammatica [42] LL(k) BNF dialect C#, Java separate generated Java Virtual Machine No GNU LGPL
HiLexed [43] LL(*) EBNF or Java Java separate internal Java Virtual Machine No GNU LGPL
Hime Parser Generator [44] LR(1), LALR(1), LR(0), LR(*)  ? C# separate generated .NET Framework No GNU LGPL
Hyacc [45] LR(1), LALR(1), LR(0) YACC C mixed external all No GNU GPL
jacc [46] LALR(1)  ? Java mixed external Java Virtual Machine No BSD
JavaCC [47] LL(k)  ? Java mixed generated Java Virtual Machine Yes BSD
jay [48] LALR(1) YACC C#, Java mixed none Java Virtual Machine No BSD
JFLAP [49] LL(1), LALR(1)  ? Java  ?  ? Java Virtual Machine Yes  ?
JetPAG [50] LL(k)  ? C++ mixed generated all No GNU GPL
JS/CC [51] LALR(1) EBNF JavaScript, JScript, ECMAScript mixed internal all Yes Artistic
KDevelop-PG-Qt [52] LL(1), Backtracking, Shunting yard  ? C++ mixed generated or external all, KDE No GNU LGPL
Kelbt [53] Backtracking LALR(1)  ? C++ mixed generated POSIX No GNU GPL
kmyacc [54] LALR(1)  ? C, Java, Perl, JavaScript mixed external all No GNU GPL
Lapg [55] LALR(1)  ? C, C++, C#, Java, JavaScript mixed generated Java Virtual Machine No GNU GPL
Lemon [56] LALR(1)  ? C mixed external all No Public domain
LEPL [57] Recursive descent Python Python (no generation, library) separate none all No MPL/GNU LGPL
Lime [58] LALR(1)  ? PHP mixed external all No GNU GPL
LISA [59] LR(?), LL(?), LALR(?), SLR(?)  ? Java mixed generated Java Virtual Machine Yes Public domain
LPG [60] Backtracking LALR(k)  ? Java mixed generated Java Virtual Machine No EPL
LLgen [61] LL(1)  ? C mixed external POSIX No BSD
LLnextgen [62] LL(1)  ? C mixed external POSIX No GNU GPL
LRSTAR [63] LALR(1), LALR(k) TBNF C++, Visual C++ separate Includes DFASTAR Microsoft Windows Microsoft Visual Studio proprietary
Menhir [64] LR(1)  ? Objective Caml mixed generated all No QPL
Mini Parser Generator [65]  ?  ? Python mixed generated all No GNU LGPL
ML-Yacc [66] LALR(1)  ? ML mixed external all No  ?
Monkey [67] LR(1)  ? Java separate generated Java Virtual Machine No GNU GPL
More Than Parsing [68] LL(1)  ? Java separate generated Java Virtual Machine No GNU GPL
Msta [69] LALR(k), LR(k) YACC, EBNF C, C++ mixed external or generated POSIX, Cygwin No GNU GPL
ocamlyacc [70] LALR(1)  ? Objective Caml mixed external all No QPL
olex [71] LL(1)  ? C++ mixed generated all No GNU GPL
Parsec [72] LL, Backtracking  ? Haskell mixed none all No BSD
Parse::Yapp [73] LALR(1)  ? Perl mixed external all No GNU GPL
Parser Objects  ? LL(k)  ? Java mixed  ? Java Virtual Machine No zlib
PCCTS [74] LL  ? C, C++  ?  ? all No  ?
PLY [75] LALR(1)  ? Python mixed generated all No MIT License
PRECC [76] LL(k)  ? C separate generated DOS, POSIX No GNU GPL
QLALR [77] LALR(1)  ? C++ mixed external all No GNU GPL
RPATK [78] Recursive descent, Backtracking BNF C (no generation, library) separate none all No GNU GPL
SableCC [79] LALR(1)  ? C, C++, C#, Java, Objective Caml, Python separate generated all No GNU LGPL
Simple Parser [80] Recursive descent Python Python separate generated all No GNU LGPL
SLK [81] LL(k)  ? C, C++, C#, Java separate external all No Proprietary
Spirit [82] Recursive descent  ? C++ mixed internal all No Boost
Styx [83] LALR(1)  ? C, C++ separate generated all No GNU LGPL
Sweet Parser [84] LALR(1)  ? C++ separate generated Microsoft Windows No zlib
Tap [85] LL(1)  ? C++ mixed generated all No GNU GPL
TextTransformer [86] LL(k)  ? C++ mixed generated Microsoft Windows Yes Proprietary
TinyPG [87] LL(1)  ? C#, Visual Basic  ?  ? Microsoft Windows Yes CPOL 1.0
Toy Parser Generator [88] Recursive descent  ? Python mixed generated all No GNU LGPL
TP Yacc [89] LALR(1)  ? Turbo Pascal mixed external all Yes GNU GPL
UniCC [90] LALR(1) EBNF C, target-language independent mixed generated POSIX No Artistic 2.0
Whale [91] LR(?), some conjunctive stuff, see Whale Calf  ? C++ mixed external all No Proprietary
Wisent [92] LALR(1)  ? C++, Java mixed external Java Virtual Machine No GNU GPL
Yacc (AT&T)/Sun [93]/[94] LALR(1) YACC C mixed external POSIX No CPL & CDDL
Yacc++ [95] LR(1), LALR(1) YACC C++, C# mixed generated or external all No Proprietary
Yapps [96] LL(1)  ? Python mixed generated all No MIT
yecc [97] LALR(1)  ? Erlang separate generated all No Erlang
VisualLangLab [98] LL(*) visual tree (JTree) All JVM Languages, though Scala is particularly well supported because of its pattern matching capabilities mixed generated Scala Yes GNU GPL
Visual BNF [99] LR(1), LALR(1)  ? C# separate generated .NET Framework Yes Proprietary
Visual Parse++ [100] LALR(???)  ? C, C++, C#, Java separate generated Microsoft Windows Yes Proprietary
YooParse [101] LR(1), LALR(1)  ? C++ mixed external all No MIT
Product Website Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Development platform IDE License

Parsing expression grammars, deterministic boolean grammars

Name Website Parsing algorithm Output languages Grammar, code Development platform License
Aurochs [102] Packrat C, Objective Caml, Java mixed all GNU GPL
CL-peg [103] Packrat Common Lisp mixed all MIT
Drat! [104] Packrat D mixed all GNU GPL
Frisby [105] Packrat Haskell mixed all BSD
grammar::peg [106] Packrat Tcl mixed all BSD
IronMeta [107] Packrat C# mixed Microsoft Windows BSD
Katahdin [108] Packrat (modified), mutating interpreter C# mixed all Public domain
Laja [109] 2-phase scannerless top-down backtracking + runtime support Java separate all GNU GPL
LPeg [110] Parsing Machine Lua mixed all MIT
Mouse [111] Recursive descent Java separate Java Virtual Machine Apache License 2.0
Narwhal [112] Packrat C mixed POSIX, Microsoft Windows BSD
Nemerle.Peg [113] Recursive descent + Pratt Nemerle separate all BSD
neotoma [114] Packrat Erlang separate all MIT
NPEG [115] Recursive descent C# mixed all MIT
OMeta [116] Packrat (modified) JavaScript, Squeak mixed all MIT
Packrat [117] Packrat Scheme mixed all MIT
Pappy [118] Packrat Haskell mixed all Proprietary
parboiled [119] Recursive descent Java, Scala mixed Java Virtual Machine Apache License 2.0
parsepp [120]  ? C++ mixed all Public domain
Parsnip [121] Packrat C++ mixed Microsoft Windows GNU GPL
peg [122] Recursive descent C mixed all MIT
PEG.js [123] Packrat JavaScript mixed all MIT
peg-parser [124] PEG parser interpreter Dylan separate all
pegc [125]  ? C mixed all Public domain
PetitParser [126] Packrat Smalltalk, JavaScript mixed all MIT
PEGTL [127] Recursive descent C++0x mixed POSIX MIT
PGE Parser Grammar Engine Recursive descent Parrot bytecode mixed Parrot virtual machine Artistic 2.0
PyPy rlib [128] Packrat Python mixed all MIT
pyPEG [129] PEG parser interpreter, Packrat Python mixed all GNU GPL
Rats! [130] Packrat Java mixed Java Virtual Machine GNU LGPL
Spirit2 [131] Recursive descent C++ mixed all Boost
Treetop [132] Recursive descent Ruby mixed all MIT
Yard [133] Recursive descent C++ mixed all MIT or Public domain
Waxeye [134] Packrat C, Java, JavaScript, Python, Ruby, Scheme separate all MIT

General context-free, conjunctive or boolean languages

Name Website Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Development platform IDE License
ACCENT [135] Earley  ? C mixed external all No GNU GPL
APaGeD [136] GLR, LALR(1), LL(k)  ? D mixed generated all No Artistic
Bison [137] LALR, GLR YACC C, C++, Java mixed external all No GNU GPL
DMS Software Reengineering Toolkit [138] GLR  ? Parlanse mixed generated Microsoft Windows No Proprietary
DParser [139] Scannerless GLR  ? C mixed scannerless POSIX No BSD
Dypgen [140] runtime-extensible GLR  ? Objective Caml mixed generated all No CeCILL-B
Elkhound [141] GLR  ? C++, Objective Caml mixed external all No BSD
eu.h8me.Parsing [142] GLR  ? N/A (state machine is runtime generated) separate external .NET Framework No BSD
GDK [143] LALR(1), GLR  ? C, Lex, Haskell, HTML, Java, Object Pascal, Yacc mixed generated POSIX No MIT
Happy [144] LALR, GLR  ? Haskell mixed external all No BSD
Hime Parser Generator [145] GLR  ? C# separate generated .NET Framework No GNU LGPL
Jison [146] LALR(1), LR(0), SLR(1) YACC JavaScript mixed generated all No MIT
Laja [147] Scannerless, two phase Laja Java separate scannerless all No GNU GPL
Scannerless Boolean Parser [148] Scannerless GLR (Boolean grammars)  ? Haskell, Java separate scannerless Java Virtual Machine No BSD
SDF/SGLR [149] Scannerless GLR SDF C, Java separate scannerless all Yes BSD
SmaCC [150] GLR(1), LALR(1), LR(1)  ? Smalltalk mixed internal all Yes MIT
SPARK [151] Earley  ? Python mixed external all No MIT
Tom [152] GLR  ? C generated none all No Proprietary
UltraGram [153] LALR, LR, GLR  ? C++, C#, Java, Visual Basic .NET separate generated Microsoft Windows Yes Proprietary
Wormhole [154] Pruning, LR, GLR, Scannerless GLR  ? C, Python mixed scannerless Microsoft Windows No MIT
Whale Calf [155] General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars)  ? C++ separate external all No Proprietary

See also

External links